<template>
  <div id="app">
    <BackToHomeButton />
    <h1>生成激活码</h1>



    <!-- 输入字段 -->
    <div>
      <label for="username">使用用户: </label>
      <input type="text" id="username" v-model="username" placeholder="输入用户名" class="short-input"  />
    </div>
    <div>
      <label for="expiryTime">过期时间: </label>
      <input type="date" id="expiryTime" v-model="expiryTime" class="short-input"  />
    </div>


    <div class="button-container">
      <button @click="sendPostRequest">生成</button>
      <button @click="sendPostZip">生成zip</button>
    </div>


    <!-- 显示加载状态 -->
    <div v-if="loading">加载中...</div>

    <!-- 显示错误信息 -->
    <div v-if="error" class="error">{{ error }}</div>

    <!-- 显示响应数据 -->
    <div v-if="responseData">
      <!-- Power Config 替换为 power.conf -->
      <div class="response-item">
        <label for="powerConfig" class="response-label">power.conf:</label>
        <div class="code-block">
          <pre>{{ formattedPowerConfig }}</pre>
          <button @click="copyToClipboard(formattedPowerConfig)" class="copy-button">复制</button>
        </div>
      </div>

      <!-- Code 替换为 激活码 -->
      <div class="response-item">
        <label for="code" class="response-label">激活码:</label>
        <div class="code-block">
          <pre>{{ responseData.code }}</pre>
          <button @click="copyToClipboard(responseData.code)" class="copy-button">复制</button>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
// 导入封装的请求方法
import { postData} from './utils/request';

export default {

  name:'GenCode',

  data() {
    return {
      username: 'Vpen',  // 默认用户名为 Vpen
      expiryTime: this.calculateExpiryDate(), // 默认过期时间为 3 年后的日期
      responseData: null,    // 存储 API 响应数据
      loading: false,        // 加载状态
      error: null,           // 错误信息
    };
  },
  computed: {
    // 格式化 powerConfig，替换换行符为 <br> 标签
    formattedPowerConfig() {
      if (this.responseData && this.responseData.powerConfig) {
        return this.responseData.powerConfig.replace(/\n/g, '\n'); // 处理换行符
      }
      return '';
    }
  },
  methods: {
    // 计算过期时间，默认是 3 年后的今天
    calculateExpiryDate() {
      const today = new Date();
      today.setFullYear(today.getFullYear() + 3); // 当前日期 + 3 年
      return today.toISOString().split('T')[0]; // 格式化为 'yyyy-mm-dd'
    },

    // 处理发送 POST 请求
    async sendPostRequest() {
      if (!this.username || !this.expiryTime) {
        this.error = '请输入完整的用户名和过期时间！';
        return;
      }

      this.loading = true;
      this.error = null;  // 清除之前的错误
      try {
        const data = {
          username: this.username,
          expiryTime: this.expiryTime // 发送日期格式的过期时间
        };
        // 调用封装的 postData 方法
        const result = await postData('/api/license/genCode', data);
        this.responseData = result;  // 获取响应数据
      } catch (err) {
        this.error = '请求失败，请稍后重试';
        console.error(err);
      } finally {
        this.loading = false;
      }
    },

    async sendPostZip() {
      if (!this.username || !this.expiryTime) {
        this.error = '请输入完整的用户名和过期时间！';
        return;
      }

      this.loading = true;
      this.error = null; // 清除之前的错误
      try {
        const data = {
          username: this.username,
          expiryTime: this.expiryTime,
        };

        // 调用 postData 并指定 responseType 为 'blob'
        const response = await postData('/api/license/genCodeZip', data, 'blob');

        // 创建 Blob 对象并下载文件
        const blob = new Blob([response.data], { type: 'application/octet-stream' });
        console.log("hedaer:"+response.headers);
        const filename = response.headers['content-disposition']
            ?.match(/filename="?(.+)"?/i)?.[1] || 'download.zip';

        const link = document.createElement('a');
        link.href = URL.createObjectURL(blob);
        link.download = filename;
        link.click();
        URL.revokeObjectURL(link.href);
      } catch (err) {
        this.error = '请求失败，请稍后重试';
        console.error(err);
      } finally {
        this.loading = false;
      }
    },



    // 复制内容到剪贴板
    copyToClipboard(content) {
      const textToCopy = content;
      const textArea = document.createElement('textarea');
      textArea.value = textToCopy;
      document.body.appendChild(textArea);
      textArea.select();
      document.execCommand('copy');
      document.body.removeChild(textArea);
      alert('内容已复制！');
    }
  }
};
</script>

<style scoped>
#app {
  font-family: Arial, sans-serif;
  text-align: center;
}

h1 {
  color: #42b983;
}

div {
  margin-top: 20px;
}

.error {
  color: red;
  font-weight: bold;
}

button {
  margin-top: 10px;
  padding: 10px 20px;
  font-size: 16px;
  background-color: #42b983;
  color: white;
  border: none;
  border-radius: 5px;
  cursor: pointer;
}

button:hover {
  background-color: #36a176;
}

input {
  margin-top: 10px;
  padding: 8px;
  font-size: 14px;
  width: 60%;
  border-radius: 5px;
  border: 1px solid #ccc;
}

/* 代码块样式 */
.code-block {
  position: relative;
  display: inline-block;
  width: 100%;
  max-width: 80%; /* 设置代码块的最大宽度，避免占满整个屏幕 */
  margin: 0 auto;
  overflow-x: auto;
}

pre {
  white-space: pre-wrap; /* 自动换行 */
  word-wrap: break-word; /* 在需要的地方换行 */
  background-color: #f5f5f5;
  padding: 10px;
  border-radius: 5px;
  text-align: left;
  font-family: 'Courier New', Courier, monospace;
  font-size: 14px;
  max-height: 200px; /* 最大高度，超过时显示滚动条 */
  overflow-y: auto; /* 超过最大高度时显示滚动条 */
}

button.copy-button {
  position: absolute;
  top: 10px;
  right: 10px;
  background-color: #42b983;
  color: white;
  border: none;
  padding: 5px 10px;
  border-radius: 5px;
  cursor: pointer;
  font-size: 12px;
}

button.copy-button:hover {
  background-color: #36a176;
}

/* 调整标签和代码块布局，标签和代码块对齐 */
.response-item {
  display: flex;
  align-items: flex-start;
  margin-bottom: 20px;
  justify-content: center;
}

.response-label {
  font-weight: bold;
  margin-right: 10px;
  text-align: left;
  width: 100px;
}
.button-container {
  display: flex;
  justify-content: center; /* 居中按钮 */
  gap: 20px; /* 按钮之间的间距 */
  margin-top: 20px; /* 容器与上方内容的间距 */
}
.short-input {
  width: 200px; /* 设置输入框的宽度 */
  max-width: 100%; /* 确保在小屏幕下不会溢出 */
  padding: 6px; /* 调整内边距 */
  font-size: 14px; /* 调整字体大小 */
  border: 1px solid #ccc; /* 设置边框 */
  border-radius: 5px; /* 圆角效果 */
}

</style>
